Le jeu d'instructions FMA est une extension des instructions Streaming SIMD Extensions 128 et 256 bits du jeu d'instructions des microprocesseurs x86 permettant d’effectuer des opérations de multiplication-addition fusionnées (FMA)[1]. Il existe deux variantes :
Les instructions FMA3 et FMA4 ont des fonctionnalités presque identiques, mais ne sont pas compatibles. Les deux contiennent des instructions FMA (fused multiply-add) pour les opérations scalaires et SIMD en virgule flottante, mais les instructions FMA3 ont trois opérandes, tandis que les instructions FMA4 en ont quatre. L’opération FMA a la forme d = round(a · b + c), où la fonction d’arrondi effectue un arrondi pour permettre au résultat de s’adapter au registre de destination s’il y a trop de bits significatifs pour tenir dans la destination.
La forme à quatre opérandes (FMA4) permet à a, b, c et d d’être quatre registres différents, tandis que la forme à trois opérandes (FMA3) exige que d soit le même registre que a, b ou c. La forme à trois opérandes rend le code plus court et l’implémentation matérielle légèrement plus simple, tandis que la forme à quatre opérandes offre une plus grande flexibilité de programmation.
Voir le jeu d'instructions XOP (en) pour plus d’informations sur les problèmes de compatibilité entre Intel et AMD.